// ********************************************************************************************************************************

// 1.将arrs中所有的数字乘以5，返回[30,25,15]
// function fn(myarr) {
//     var arr = [];
//     for (var i = 0; i < myarr.length; i++) {
//         if (!isNaN(myarr[i]) && typeof myarr[i] === "number" )
//             arr.push(myarr[i] * 5)
//     }
//     return arr;
// }

// var a = fn(["a", "c", 6, "e", 5, 3, "d"])
// console.log(a)
// console.log(fn([1, 2, 3, 4, 5, "6"]))
// [18, 6, 9, 23, 88, 5]

// ********************************************************************************************************************************

//2、写一个函数，将这个数组中所有的一位数前面补0，输出一个新数组，即最后返回[18,"06","09",23,88,"05"]
// function fn1(arr) {
//     for (var i = 0; i < arr.length; i++) {
//         if (!isNaN(arr[i]) && typeof arr[i] === "number" && arr[i] < 10) {
//             arr[i] = "0" + arr[i]
//         }
//     }
//     return arr
// }
// console.log(fn1([18, 6, 9, 23, 88, 5]))

// ********************************************************************************************************************************

//3、遍历数组，找最小值和最小值的下标.

// var arr = [3, 4, 2, 8, 15, 1, 98]; //最小值为:1，最小值的下标为5.

// function fn(arr) {
//     var index = 0 //下标
//     var value = arr[0]  //最小值
//     for (var i = 1; i < arr.length; i++) {  //循环数组
//         if (value > arr[i]) {  //判断value 是不是最小值 
//             value = arr[i]
//             index = i
//         }
//     }

//     return [index, value]
// }

// console.log(fn([3, 4, 2, 8, 15, 98]))

// ********************************************************************************************************************************

//4、随机生成一个十六进制的颜色值，改变页面颜色
// 十六进制数它由0-9，A-F组成，字母不区分大小写

// ********************************************************************************************************************************

// 5.将数组中重复的值只保留一个，返回 [1,2,3,5,6,7,8,9]

// var nums = [1, 2, 3, 4, 1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 8, 8, 9, 9];

// function fn(arr) {
//     var arr1 = [];
//     for (var i = 0; i < arr.length; i++) {
//         var length = arr1.length;
//         var flag = 0;
//         for (var j = 0; j <= arr1.length; j++) {
//             if (arr[i] === arr1[j])
//                 flag++;
//         }
//         if (flag == 0) {
//             arr1.push(arr[i])
//         }


//         // if (arr1.indexOf(arr[i]) === -1)
//         //     arr1.push(arr[i])

//     }
//     return arr1

// }
// console.log(fn(nums))

// ********************************************************************************************************************************


//6.reverse封装
// function reverse(arr) {
//     var arr1 = []

//     // for (var i = 0; i < arr.length; i++) {
//     //     arr1.unshift(arr[i])
//     // }
//     // return arr1


//     for (var i = arr.length - 1; i >= 0; i--) {
//         arr1.push(arr[i])
//     }
//     return arr1

// }

// console.log(reverse([1, 2, 3, 345345, 34, 543, 5, 34]))  // [3,2,1]

// ********************************************************************************************************************************

//7.indexOf的完整封装

// ********************************************************************************************************************************

//8.封装一个排序方法, 可实现数组的内容从小到大排序（sort的封装）

// ********************************************************************************************************************************

// 9.求二维数组的和

// var date = new Date()
// for (var i = 0; i < 1000000000; i++) {

// }
// var date1 = new Date()
// console.log(date1 - date)

// ********************************************************************************************************************************

// 10.0：模拟indexOf方法，有两个参数
// ********************************************************************************************************************************


// 10.1:   一维转二维

// ********************************************************************************************************************************

// 10.2:冒泡排序

// ********************************************************************************************************************************

// 10.3 选择排序

function selectionSort(arr) {
        var len = arr.length;
        var minIndex, temp;
        console.time('选择排序耗时');
        for (var i = 0; i < len - 1; i++) {
                
                minIndex = i;
                for (var j = i + 1; j < len; j++) {
                        if (arr[j] < arr[minIndex]) { //寻找最小的数

                                minIndex = j; //将最小数的索引保存

                        }
                }
                temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
        }

        console.timeEnd('选择排序耗时');
        return arr;
}
var arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 1];
console.log(selectionSort(arr)); //[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]


// ********************************************************************************************************************************


// 10.封装一个函数searchResult(),根据传入的数据及条件，输出符合条件的人名，最终得到是一个数组。
        // searchResult(stus,’女’,’大一’)根据数据去查询，将符合条件女且大一的学生姓名放到一个数组中返回
        // var stus = [
        //     ['小A', '女', 21, '大一'],
        //     ['小B', '男', 23, '大三'],
        //     ['小C', '男', 24, '大四'],
        //     ['小D', '女', 21, '大一'],
        //     ['小E', '女', 22, '大四'],
        //     ['小F', '男', 21, '大一'],
        //     ['小G', '女', 22, '大二'],
        //     ['小H', '女', 20, '大三'],
        //     ['小I', '女', 20, '大一'],
        //     ['小J', '男', 20, '大三'],
        //     ['小K', '女', 23, '大四'],
        //     ['小L', '男', 20, '大三'],
        //     ['小M', '女', 21, '大二'],
        //     ['小N', '男', 20, '大一']
        // ];

// ********************************************************************************************************************************

// 11、现在有一个数组存放字符串数据：
        // ['item1', 'item2','item3', 'item4', 'item5']
        // 有另外一个数组存放一组数组：
        // [
        //   [ 'section1',  0 ],
        //   [ 'section2',  2  ]
        // ]
        // 最后结果是：['section1', 'item1', 'item2', 'section2', 'item3', 'item4', 'item5']

        //12.一维数组转二维
        // var arr = [1, 2, 32, 4, 5, 6, 7, 8, 9, 10];

// 补全代码   ******************************************************************************************************

/* 题目一：补全代码题：数组的每个元素都执行fn函数，且将数组 arr 中的元素及数组的下标作为调用函数 fn 的参数来使用。
         * @param {object} [arr 数组]
         * @param {function} [fn 回调函数]
         */
        // function forEach(arr, fn) {
        //     // 此处补全代码，实现题目要求

        // }
        // var arr = ['a', 'b', 'c'];
        // // 调用forEach函数
        // forEach(arr, function(item, index) {
        //     console.log(item, index);
        // });
/* 打印结果是:
'a',0
'b',1
'c',2
*/

// ********************************************************************************************************************************

//案例3:封装一个noRepeat函数,从数组中随机取出3个不同的值，放入一个新数组，升序排序后返回。数组如下: var arr = [2,12,4,13,95,96,19,33];
        // 评分标准 
        // 1.正确使用随机数，将获取到的值放入新数组(10分)
        // 2.正确实现去重和排序（10分）
        // 3.不允许使用数组内置的indexOf方法，自己封装一个（10分）

// ********************************************************************************************************************************
